// Grunt 的入口文件
// 用于定义一些需要 Grunt 自动执行的任务
// 需要导出一些函数
// 此函数接收一个 grunt 的形参, 内部提供一些创建任务时可以用到的 API

module.exports = grunt => {
  // 回调函数
  grunt.registerTask("foo", () => {
    console.log("hello grunt~");
  })

  // 字符串 就是描述
  grunt.registerTask("bar", "这是一个bar功能", () => {
    console.log("hello bar~~~");
  })

  grunt.registerTask("bad", () => {  // 使用 --force来标记任务，强制执行任务
    console.log("bad working");
    return false;
  })

  // // default任务，不需要接具体的任务
  // grunt.registerTask("default", () => {
  //   console.log("这是一个默认任务");
  // })

  grunt.registerTask("default", ['foo', 'bad', 'bar'])

  // 处理异步任务
  // grunt.registerTask("async-task", () => {
  //   setTimeout(() => {
  //     console.log("这是一个异步任务，加油哟");
  //   }, 1000);
  // })
  grunt.registerTask("async-task", function () {
    const done = this.async();
    setTimeout(() => {
      console.log("这是一个成功的异步任务");
      done();
    }, 1000);
  })

  grunt.initConfig({
    foo: "bar",
    build: {
      options: {// options不是一个子任务配置， 而是多目标的整体配置
        config: "111"
      },// 多目标模式，设置整体配置，作用域多个目标
      css: {
        data: "1",
        options: {
          config: "css"
        }
      },
      js: "2"
    }
  })// 配置方法
  grunt.registerTask("foo1", () => {
    console.log(grunt.config("foo"));
  })

  // 多目标模式，可以让任务根据配置形成多个子任务
  grunt.registerMultiTask("build", function () {
    console.log(`target: ${this.target}, data: ${this.data}, options: ${this.options()}`);
  })
  // 如果想要运行多目标中的具体的子任务，可以通过:xxx来运行
  // yarn grunt build:css
}